package com.cty.TestTemplate;

import org.junit.Test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @Auther: cty
 * @Date: 2020/7/26 21:16
 * @Description: 测试模板——输入树（有两个以上子节点）
 * @version: 1.0
 */
public class _04_02_TestTree {

    @Test
    void test(){
        test1();
        test2();
        test3();
    }  // end test


    void connectTreeNode(TreeNode parent, TreeNode child){
        parent.children.add(child);
    }  // end connectTreeNode()


    void test1(){
        // 一 特殊值测试
        TreeNode nullNode = null;
        //TODO: Test goes here...

        // 二 边界值测试
        TreeNode node = new TreeNode(1);
        //TODO: Test goes here...

    }  // end test1()


    // 三 功能测试
    // 树退化成一个链表
    //               1
    //              /
    //             2
    //            /
    //           3
    //          /
    //         4
    //        /
    //       5
    void test2(){
        TreeNode n1 = new TreeNode(1);
        TreeNode n2 = new TreeNode(2);
        TreeNode n3 = new TreeNode(3);
        TreeNode n4 = new TreeNode(4);
        TreeNode n5 = new TreeNode(5);
        connectTreeNode(n1,n2);
        connectTreeNode(n2,n3);
        connectTreeNode(n3,n4);
        connectTreeNode(n4,n5);

        //TODO: Test goes here...  treeRoot=n1

    }  // end test2()


    // 形状普通的树
    //              1
    //            /   \
    //           2     3
    //       /       \
    //      4         5
    //     / \      / |  \
    //    6   7    8  9  10
    void test3(){
        TreeNode n1 = new TreeNode(1);
        TreeNode n2 = new TreeNode(2);
        TreeNode n3 = new TreeNode(3);
        TreeNode n4 = new TreeNode(4);
        TreeNode n5 = new TreeNode(5);
        TreeNode n6 = new TreeNode(6);
        TreeNode n7 = new TreeNode(7);
        TreeNode n8 = new TreeNode(8);
        TreeNode n9 = new TreeNode(9);
        TreeNode n10 = new TreeNode(10);
        connectTreeNode(n1,n2);
        connectTreeNode(n1,n3);
        connectTreeNode(n2,n4);
        connectTreeNode(n2,n5);
        connectTreeNode(n4,n6);
        connectTreeNode(n4,n7);
        connectTreeNode(n5,n8);
        connectTreeNode(n5,n9);
        connectTreeNode(n5,n10);

        //TODO: Test goes here...  treeRoot=n1

    }  // end test3()


    class TreeNode {
        int value;
        List<TreeNode> children;

        public TreeNode(){children = new ArrayList<>();}
        public TreeNode(int value){this.value = value; children = new ArrayList<>();}
    } // end TreeNode{}
}  // end class
